package model.dao;

import java.util.List;

import javax.persistence.TypedQuery;

import model.basicas.CargoDepartamento;
import model.interfaces.ICargoDepartamentoDAO;

import excecoes.DadosCadastroInvalidos;

public class CargoDepartamentoDAO extends GenericoDAO<CargoDepartamento> implements ICargoDepartamentoDAO {

	@Override
	public void inserir(CargoDepartamento objeto) throws DadosCadastroInvalidos {
		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}
		this.getEntitymanager().persist(objeto);
		this.getEntitymanager().getTransaction().commit();
		
	}

	@Override
	public void remover(CargoDepartamento objeto) throws DadosCadastroInvalidos {
		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}

		CargoDepartamento aux = consultarPorId(objeto.getIdCargo());
		if (aux != null)
		{
			this.getEntitymanager().remove(aux);
			this.getEntitymanager().getTransaction().commit();
		}
		
	}

	@Override
	public CargoDepartamento atualizar(CargoDepartamento objeto)
			throws DadosCadastroInvalidos {
		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}

		CargoDepartamento aux = consultarPorId(objeto.getIdCargo());
		if (aux != null)
		{
			this.getEntitymanager().merge(objeto);
			this.getEntitymanager().getTransaction().commit();
		}
		
		return objeto;
	}

	@Override
	public List<CargoDepartamento> listarCadastrados() {
		TypedQuery<CargoDepartamento> q = this.getEntitymanager().createQuery
				("select c from CargoDepartamento c", CargoDepartamento.class);
		List<CargoDepartamento> list = q.getResultList();
		
		return list;
	}

	@Override
	public CargoDepartamento consultarPorId(long id) {
		
		return this.getEntitymanager().find(CargoDepartamento.class, id);
	}
	

}